import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by zhourh on 2018/9/12.
 * 给出 N 名运动员的成绩，找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “金牌”，“银牌” 和“ 铜牌”（"Gold Medal", "Silver Medal", "Bronze Medal"）。

 (注：分数越高的选手，排名越靠前。)

 示例 1:

 输入: [5, 4, 3, 2, 1]
 输出: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]
 解释: 前三名运动员的成绩为前三高的，因此将会分别被授予 “金牌”，“银牌”和“铜牌” ("Gold Medal", "Silver Medal" and "Bronze Medal").
 余下的两名运动员，我们只需要通过他们的成绩计算将其相对名次即可。
 提示:

 N 是一个正整数并且不会超过 10000。
 所有运动员的成绩都不相同。

 */
public class RelativeRanks {

    public static void main(String[] args) {
        Printer.printArray(new RelativeRanks().findRelativeRanks(new int[]{5, 4, 3, 2, 1 }));
        Printer.printArray(new RelativeRanks().findRelativeRanks(new int[]{8, 6, 9, 2, 1, 5 }));
    }

    public String[] findRelativeRanks(int[] nums) {
        if (nums == null || nums.length == 0) {
            return null;

        }
        int[] copyNums = Arrays.copyOf(nums, nums.length);

        Arrays.sort(copyNums);

        Map<Integer, String> rankMap = new HashMap<>();

        for (int i = copyNums.length - 1; i >= 0; i-- ) {
            if (i == copyNums.length - 1) {
                rankMap.put(copyNums[i], "Gold Medal");
            } else if (i == copyNums.length - 2) {
                rankMap.put(copyNums[i], "Silver Medal");
            } else if (i == copyNums.length - 3) {
                rankMap.put(copyNums[i], "Bronze Medal");
            } else {
                rankMap.put(copyNums[i], String.valueOf(copyNums.length - i));
            }
        }

        String[] rankResult = new String[nums.length];

        for (int i = 0; i < rankResult.length; i++ ) {
            rankResult[i] = rankMap.get(nums[i]);
        }

        return rankResult;

    }
}
